/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package trunk.view.draw;

import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JSeparator;
import javax.swing.event.MouseInputAdapter;
import trunk.model.*;
import trunk.view.MenuClicDroit.MenuClicDroit;

/**
 * Class DrawCtrl
 * 
 * Listenner permettant d'utiliser les evenements de la souris
 * 
 * @author LEFEVRE Michael
 * @author THOUE Jonathan
 */
public class DrawCtrl extends MouseInputAdapter{

    private DrawZone   view;
    
    private Point firstClick;
    /**
     * Constructeur de la classe
     * @param view - lien vers la vue du composant
     */
    public DrawCtrl(DrawZone view) {
        this.view = view;
 
        firstClick= new Point();
    }
    /**
     * Evenement de click de la souris
     * @param me -event de la souris
     */
    @Override
    public void mouseClicked(MouseEvent me) {
        if((me.getModifiers() & MouseEvent.BUTTON3_MASK) == 0){ //si click gauche
            if(view.getModel().getDessin().getCurrentTool()==EDrawTool.POINT){                
                view.getModel().getDessin().setTempElement(new Point(me.getX(), me.getY()));
                view.getModel().getDessin().getTempElement().setCouleur(view.getModel().getDessin().getCurrentColor());
                view.getModel().getDessin().getElements().add(view.getModel().getDessin().getTempElement());
                view.getModel().resetTampon();
            }else if(view.getModel().getDessin().getCurrentTool()==EDrawTool.SEGMENT){                   
                if(view.getModel().getDessin().getTempElement() ==null){
                    view.getModel().getDessin().setTempElement(new Segment(new Point(me.getX(), me.getY()))); 
                }else{
                    view.getModel().getDessin().setTempElement(new Segment(((Segment)view.getModel().getDessin().getTempElement()).getA(),new Point(me.getX(), me.getY())));
                    view.getModel().getDessin().getTempElement().setCouleur(view.getModel().getDessin().getCurrentColor());
                    view.getModel().getDessin().getElements().add(view.getModel().getDessin().getTempElement());
                    view.getModel().resetTampon();
                }
            }else if(view.getModel().getDessin().getCurrentTool()==EDrawTool.RECTANGLE){                   
                if(view.getModel().getDessin().getTempElement() ==null){
                    view.getModel().getDessin().setTempElement(new Rectangle(new Point(me.getX(), me.getY()))); 
                }else{
                    view.getModel().getDessin().setTempElement(new Rectangle(((Rectangle)view.getModel().getDessin().getTempElement()).getA(),new Point(me.getX(), me.getY())));
                    view.getModel().getDessin().getTempElement().setCouleur(view.getModel().getDessin().getCurrentColor());
                    view.getModel().getDessin().getElements().add(view.getModel().getDessin().getTempElement());
                    view.getModel().resetTampon();;
                }
            }else if(view.getModel().getDessin().getCurrentTool()==EDrawTool.CIRCLE){                
                if(view.getModel().getDessin().getTempElement() ==null){
                    view.getModel().getDessin().setTempElement(new Cercle(new Point(me.getX(), me.getY()))); 
                }else{
                    view.getModel().getDessin().setTempElement(new Cercle(((Cercle)view.getModel().getDessin().getTempElement()).getA(),new Point(me.getX(), me.getY())));
                    view.getModel().getDessin().getTempElement().setCouleur(view.getModel().getDessin().getCurrentColor());
                    view.getModel().getDessin().getElements().add(view.getModel().getDessin().getTempElement());
                    view.getModel().resetTampon();
                }
            }else if(view.getModel().getDessin().getCurrentTool()==EDrawTool.POLYGON){                
                if(view.getModel().getDessin().getTempElement() ==null){
                    view.getModel().getDessin().setTempElement(new Polygone());
                    ((Polygone)view.getModel().getDessin().getTempElement()).getListPoint().add(new Point(me.getX(), me.getY()));
                }else{
                    ((Polygone)view.getModel().getDessin().getTempElement()).getListPoint().add(new Point(me.getX(), me.getY()));
                    view.getModel().getDessin().getTempElement().setCouleur(view.getModel().getDessin().getCurrentColor());
                    view.getModel().getDessin().getElements().add(view.getModel().getDessin().getTempElement());
                }
            }else if(view.getModel().getDessin().getCurrentTool()==EDrawTool.SELECT){
                this.firstClick = new Point(me.getX(), me.getY());

                for(ElementGeo element : view.getModel().getDessin().getElements()){
                    
                    if(element.isPointOver(this.firstClick, 5))
                            element.setSelected(true);
                }
            }else if(view.getModel().getDessin().getCurrentTool()==EDrawTool.AXE){
                view.getModel().setOrigine(new Point(me.getX(), me.getY()));
            }
            view.repaint();
        }
        else{ //si click droit
            MenuClicDroit clicDroit = new MenuClicDroit(view.getModel());
            clicDroit.show(view, me.getX(), me.getY());
        }
    } 
    /**
     * Evenement du deplacement de la souris
     * @param arg0 -event de la souris
     */
    @Override
    public void mouseDragged(MouseEvent arg0) {
        if(view.getModel().getDessin().getCurrentTool()==EDrawTool.AXE){
                view.getModel().setOrigine(new Point(arg0.getX(), arg0.getY()));
                view.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
        }else{
        
            view.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
            Point click = new Point(arg0.getX(), arg0.getY());
            int diffX = click.getX()- this.firstClick.getX();
            int diffY = click.getY()- this.firstClick.getY();

            for(ElementGeo element : view.getModel().getDessin().getElements()){
                if(element.isSelected())
                        element.translateTo(diffX,diffY); 
            }
            this.firstClick=click;     
        }
        view.repaint();
    }
    /**
     * Evenement de la relache du click de la souris
     * @param me -event de la souris
     */
    @Override
    public void mouseReleased(MouseEvent me) {
        view.setCursor(Cursor.getDefaultCursor());
    }
    
}
